      EnotVM32
  https://chat.qwen.ai

    EnotVM32

 1.  

EnotVM32    32-   - 
.         
 ,    ASM32    
 FASM (Flat Assembler)   . 


 :

EnotVM32  32- ,   16- 
(, Turbo Pascal / DOS)   䳿 
 16-  .

---

 2.   


 2.1. 

  256   .   
 Int32 (32-  ).

 : `A` ... `Z` ( `0` ... `25`).

 : `AA` ... `JV`. ( '   FASM,
 `_`,  `AH_`, `AL_`).

   EXTR:
   `YA` ... `YH` (232 ... 239)     .
   `ZA` ... `ZH` (240 ... 247)    .

 : `CMP1` (254)  `CMP2` (255).
   .

 :
   `RgEIP`    ( ).
   `RgESP`   .
  (    /    `MOV`).

2.2. '  

 ' (RAM): ˳  .
: 48  (49152 ,  `0..49151`).
      `0`.


 (RAMc):    . : 255 . 
  :     `Int32` (4 ).
 `RgESP`  ,   !
   `PUSH/POP`  `RgESP`  `1`.


2.3.  '
   ' ,   48 ,  
'.
   : 48 .
 ʳ :  10 ( `0..cMaxPagesOfRAMext`).

---


 3.   (ISA)

 3.1.    (MOV)
    x86,  `MOV` ,
 EnotVM32     :
32- (DWORD):  `MOVrv`, `MOVrr`, `MOVrm`, `MOVrmr`, `MOVmr`, `MOVmrr`
16- (WORD):   `MOV2rm`, `MOV2rmr`, `MOV2mr`, `MOV2mrr` (   32 ).
8- (BYTE):    `MOV1rm`, `MOV1rmr`, `MOV1mr`, `MOV1mrr` (   32 ).

 3.2.  
 `CALLa DWA1` / `CALLr Rg1`    (  ).
 `RET`    .
 `GOTOa DWA1` / `GOTOr Rg1`    ( `JMP`).

 3.3.  
   `CMP1`  `CMP2` ( ).

 `GOTOsa...`     .
 `GOTOsr...`      .
  : `Is` (=), `NotIs` (<>), `MoreIs` (>=), `Less` (<).

 3.4.   
 `PUSHr Rg1` / `POPr Rg1`    .
 `PUSHrsvr Rg1, Rg2` / `POPrsvr Rg1, Rg2`  /
    (   / ).

 3.5.   
    32- . : `Rg1 = Rg1 op Rg2`.
 :   `ADD`, `SUB`, `MUL`, `DIV`, `MOD`, `INC`, `DEC`.
 :   `AND`, `OR`, `XOR`, `NOT`, `SHL`, `SHR`.
 `CMPrr Rg1, Rg2`   `Rg1`  `CMP1`,  `Rg2`  `CMP2`
    .

---


 4.   (EXTR)
 `$2A` (`EXTR Adr1, Adr2`)     (INT)  BIOS.
   .
       word,  ""
     Adr1  Adr2
(`Adr2`  , `Adr1`   ).


 0 (0-255):  

|   |  
|      |
| 0    | `EXTR_NOP` (   ) |
| 1    | `CheckEXTR` (   EXTR) |
| 2    | `HALT` ( ,    `YA`) |
| 3    | `Writeln_GetTimeStr` (  ) |
| 4    | `Readln0` (  Enter) |
| 5    | `VersionEnotVM` (    `ZA`) |
| 6    | `Writeln0` (  ) |
| 7    | `CONT` (:   'cont'  'CONT') |
| 8    | `WritelnYA` (   `YA`  Dec  Hex) |
| 9    | `Wait00secTime...` ( 00    ) |
| 10   | `EndProgram` (   ) |
| 11-17|   ,  RAM  . |


  1 (256-511):   

  256:  `WritelnStr`       .
  257:  `WriteStr`     .
        `YA`.


  2 (512-767):    '

  512: `CopyMainToMain` (   ').
  513: `CopyMainToExt` (   ).
  514: `CopyExtToMain` (   ).
  515: `CopyExtToExt` (̳   ').


  3 (768-1023):   

    1,   `CMP1`  `CMP2`
   32- 
(`GOTOuaMoreIs`, `GOTOuaLess`, `GOTOurMoreIs`, `GOTOurLess`).

---



 5.   ( EXTR 256/257)
  EnotVM32   '   ,
     .       `YA`:
    1: 8-  (FullSize, CurSize).
    2: 16- .
    3: 24- .
    4: 32- .
          255 
(   ).

---


6.    

1. :
  `EnotVM32`   `C:\`. 
       :
`C:\EnotVM32\BP4_001\` ( `BP4`   ,   
  Turbo Pascal 4.0).

2. ϳ : 
      `C:\EnotVM32\BP4_001\Examples\`,
    -  ( `BOOT.bin`)     
    `C:\EnotVM32\BP4_001\`.

3. : 
     `EnotVM32.EXE`.   
  `BOOT.bin`  '      0.

---



7.    EnotVM32 (FASM)

    
flat assembler (FASM)  1.73.25  .

   :
1.  FASM    (https://flatassembler.net/).
2.     `C:\FASMdos\` ( DOS) 
  `C:\FASMwin\` ( Windows).
3. ,       '  :
    `Macros.asm`   ,    
    (`AA`, `YA`, `CMP1` )    EnotVM32.
    `BOOT.asm`       .

 :
   `BOOT.asm`  -  .
   bat-:
 `EditDos.Bat` / `EditWin.Bat`    .
 `ComplDos.Bat` / `ComplWin.Bat`   .

: Bat-    
 `BOOT.bin` (`del BOOT.bin`).     
,    (`REM del BOOT.bin`).

ϳ   '   `BOOT.bin`,
     `EnotVM32.EXE`.
